#include<stdio.h>
#include<stdlib.h>
#include<errno.h>
#include<string.h>
#include<sys/types.h>
#include<netinet/in.h>
#include<sys/socket.h>
#include<sys/wait.h>
#include <arpa/inet.h>
#include <unistd.h>

#define DEST_PORT 8811//目标地址端口号
#define DEST_IP "127.0.0.1"/*目标地址IP，这里设为本机*/

int main(){
    int sockfd;
    struct sockaddr_in dest_addr;
    char sendBuf[200],recvBuf[200];
    pid_t pid;


    sockfd=socket(AF_INET,SOCK_STREAM,0);/*建立socket*/
    if(sockfd==-1){
        perror("创建socket失败");
        return 0;
    }


    //参数意义见上面服务器端
    dest_addr.sin_family=AF_INET;
    dest_addr.sin_port=htons(DEST_PORT);
    dest_addr.sin_addr.s_addr=inet_addr(DEST_IP);
    bzero(&(dest_addr.sin_zero),8);

    if(connect(sockfd,(struct sockaddr*)&dest_addr,sizeof(struct sockaddr))==-1){//连接方法，传入句柄，目标地址和大小
        perror("连接服务器错误");
        return 0;
    }

    pid = fork();

    if (pid < 0) {
        perror("创建子进程失败");
        exit(0);
    } else if (pid) {
        while (1) {
            printf("Client:");
            fgets(sendBuf,200,stdin);
            if (send(sockfd,sendBuf,strlen(sendBuf),0) != strlen(sendBuf)) {
                perror("发送错误");
                exit(0);
            }
            memset(sendBuf,0,200);
        }
    } else {
        while (1) {
            if (recv(sockfd,recvBuf,200,0) == -1) {
                perror("获取数据错误");
                exit(0);
            }
            printf("\n服务器:%s\n",recvBuf);
            memset(recvBuf,0,200);
        }
    }

}
